Caching হলো একটি মেকানিজম যা ডেটা বা ফলাফলকে একটি দ্রুত এক্সেসযোগ্য স্টোরেজে সংরক্ষণ করে, যাতে একই ডেটার জন্য পরবর্তী অনুরোধগুলোতে ডাটাবেস বা কম্প্লেক্স প্রসেসিংয়ে যাওয়ার প্রয়োজন হয় না। এটি অ্যাপ্লিকেশনের পারফরম্যান্স উন্নত করার জন্য ব্যবহৃত হয়।
স্প্রিং জেডিবিসি ব্যবহার করে অ্যাপ্লিকেশন যখন ডাটাবেসের সাথে কাজ করে, তখন ক্যাশিং এর ব্যবহার বেশ কয়েকটি সুবিধা প্রদান করে:
Spring JDBC তে ক্যাশিং সরাসরি সমর্থন করে না। তবে, স্প্রিং-এর ক্যাশিং মডিউল এবং বিভিন্ন ক্যাশিং লাইব্রেরি (যেমন EhCache, Caffeine, Redis) ব্যবহার করে ক্যাশিং ইমপ্লিমেন্ট করা যায়।
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>3.1.3</version>
</dependency>
@Configuration
@EnableCaching
public class CacheConfig {
@Bean
public CacheManager cacheManager() {
return new CaffeineCacheManager("studentsCache");
}
}
@Service
public class StudentService {
@Autowired
private JdbcTemplate jdbcTemplate;
@Cacheable("studentsCache")
public Student getStudentById(int id) {
System.out.println("Fetching from database...");
String sql = "SELECT id, name, age FROM students WHERE id = ?";
return jdbcTemplate.queryForObject(sql, new Object[]{id}, (rs, rowNum) -> {
Student student = new Student();
student.setId(rs.getInt("id"));
student.setName(rs.getString("name"));
student.setAge(rs.getInt("age"));
return student;
});
}
}
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
StudentService studentService = context.getBean(StudentService.class);
// প্রথমবার ডাটাবেস থেকে ডেটা রিট্রিভ হবে
Student student1 = studentService.getStudentById(1);
System.out.println(student1);
// একই রেকর্ড দ্বিতীয়বার রিকোয়েস্ট করলে ক্যাশ থেকে ডেটা রিট্রিভ হবে
Student student2 = studentService.getStudentById(1);
System.out.println(student2);
}
আউটপুট:
Fetching from database...
Student{id=1, name='John Doe', age=20}
Student{id=1, name='John Doe', age=20}
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
@Configuration
@EnableCaching
public class RedisCacheConfig {
@Bean
public RedisConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory();
}
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory());
return template;
}
@Bean
public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {
return RedisCacheManager.builder(connectionFactory).build();
}
}
@Service
public class StudentService {
@Autowired
private JdbcTemplate jdbcTemplate;
@Cacheable("studentsCache")
public Student getStudentById(int id) {
System.out.println("Fetching from database...");
String sql = "SELECT id, name, age FROM students WHERE id = ?";
return jdbcTemplate.queryForObject(sql, new Object[]{id}, (rs, rowNum) -> {
Student student = new Student();
student.setId(rs.getInt("id"));
student.setName(rs.getString("name"));
student.setAge(rs.getInt("age"));
return student;
});
}
}
@Cacheable
:
উদাহরণ:
@Cacheable("cacheName")
public Data fetchData(int id) { ... }
@CachePut
:
উদাহরণ:
@CachePut("cacheName")
public Data updateData(int id, Data newData) { ... }
@CacheEvict
:
উদাহরণ:
@CacheEvict("cacheName")
public void deleteData(int id) { ... }
Spring JDBC-তে ক্যাশিং ব্যবহার করা অ্যাপ্লিকেশনের পারফরম্যান্স এবং স্কেলেবিলিটি বৃদ্ধির একটি কার্যকর পদ্ধতি। Spring এর বিল্ট-ইন ক্যাশিং মেকানিজম, যেমন @Cacheable
, সহজভাবে ক্যাশিং ইমপ্লিমেন্ট করতে সহায়ক। Redis এবং EhCache এর মতো টুল ব্যবহার করে ক্যাশিং আরও শক্তিশালী করা যায়।
Read more